package study.kit.el.zh;

import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import net.minidev.json.JSONArray;
import org.junit.Test;
import study.kit.el.zh.parse.RangeVO;
import study.kit.el.zh.parse.RowVO;
import study.kit.el.zh.parse.TableReader;

import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;

@Slf4j
public class TableUtil {

    //
    String json = ResourceUtil.readStr("zh/test.json", Charset.defaultCharset());

    @Test
    public void verify_test() {

        // 头部验证
        // 1.数量
        // 2.头值
        RowVO header = TableReader.readHeader(json);
        log.info("{}", JSONUtil.toJsonPrettyStr(header));

        // 合并验证
        // 1.行合并
        // 2.列合并
        List<RangeVO> rangeVOLt = TableReader.readRanges(json);
        log.info("{}", JSONUtil.toJsonPrettyStr(rangeVOLt));



        //        JSONArray ranges = TableReader.readRanges(json);
        //        log.info("{}", ranges);
        //        for (Object range : ranges) {
        //            // merge 属性
        //            int rowNum = JsonPath.read(range, "$.[1]");
        //            int colNum = JsonPath.read(range, "$.[2]");
        //            int rowCount = JsonPath.read(range, "$.[3]");
        //            int colCnt = JsonPath.read(range, "$.[4]");
        //            if (rowCount > 1) {
        //                log.error("第{}列 有 行 合并", colNum + 1);
        //            }
        //            if (colCnt > 1) {
        //                log.error("第{}列有 列 合并", colNum + 1);
        //            }
        //
        //            //log.info("{}, {}", colNum, colCnt);
        //        }
        //        JSONArray obj = JsonPath.read(data, "$.[1]");
        //        log.info("{}", obj);
        //log.info("{}", data.size());
        //log.info("{}", JSONUtil.toJsonStr(data));
    }

    @Test
    public void parse_test() {
        //
        String json = ResourceUtil.readStr("zh/table.json", Charset.defaultCharset());


        // 标题
        Map<Integer, String> headMap = TableHelper.buildHeadMap(json);
        //log.info("{}", headMap);

        // 数据行
        JSONArray rows = TableHelper.readRows(json);
        //log.info("{}", rows);
        List<TableVO> VOLt = ListUtil.toList();
        int order = 0;
        for (Object row : rows) {
            //log.info("{}", row);

            //
            TableVO VO = new TableVO();
            VO.setRowNum(++order);

            // 数据列
            JSONArray cols = (JSONArray) row;
            //log.info("size= {}", cols.size());
            for (Object _col : cols) {
                JSONArray col = (JSONArray) _col;
                //log.info(">>>>>> {}", col);

                // 索引和值
                Integer index = TableHelper.readIndex(col);
                Object value = TableHelper.readValue(col);
                //log.info("{}, {}= {}", index, name, value);
                TableHelper.setValue(VO, index, value, headMap);
            }
            VOLt.add(VO);
        }
        // 填充合并
        TableHelper.fillBean(VOLt);
        log.info("{}", JSONUtil.toJsonStr(VOLt));
    }
}
